home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / assembly / dcintro.lha / SA_Intro / Data / st-replay.s < prev   
Encoding:
Text File  |  1992-09-02  |  7.7 KB  |  513 lines

  1.  
  2. mt_init    lea    $dff000,a4
  3.     lea    songs(pc),a1
  4.     lea    stuff(pc),a0
  5.     moveq    #0,d1
  6.     muls    #3,d0
  7.     clr.b    (a0)
  8.     move.b    (a1,d0.w),3(a0)
  9.     move.b    2(a1,d0.w),2(a0)
  10.     move.b    1(a1,d0.w),d1
  11.     lsl    #4,d1
  12.     move    d1,4(a0)
  13.     clr    8(a0)
  14.     lea    mt_data,a0
  15.     lea    module(pc),a1
  16.     move.l    a0,(a1)
  17.     move.l    a0,a1
  18.     lea    $3b8(a1),a1
  19.     moveq    #$7f,d0
  20.     moveq    #0,d1
  21. mt_loop    move.l    d1,d2
  22.     subq    #1,d0
  23. mt_lop2    move.b    (a1)+,d1
  24.     cmp.b    d2,d1
  25.     bgt.s    mt_loop
  26.     dbf    d0,mt_lop2
  27.     addq.b    #1,d2
  28.     lea    mt_samplestarts(pc),a1
  29.     asl.l    #8,d2
  30.     asl.l    #2,d2
  31.     add.l    #$43c,d2
  32.     add.l    a0,d2
  33.     move.l    d2,a2
  34.     moveq    #$1e,d0
  35. mt_lop3    clr.l    (a2)
  36.     move.l    a2,(a1)+
  37.     moveq    #0,d1
  38.     move.w    42(a0),d1
  39.     asl.l    #1,d1
  40.     add.l    d1,a2
  41.     lea    $1e(a0),a0
  42.     dbf    d0,mt_lop3
  43.     bset    #1,$bfe001
  44.     bra.s    vol0
  45.  
  46. mt_end    lea    $dff000,a4
  47.     bclr    #1,$bfe001
  48.     move    #$f,$96(a4)
  49. vol0    clr    $a8(a4)
  50.     clr    $b8(a4)
  51.     clr    $c8(a4)
  52.     clr    $d8(a4)
  53.     rts
  54.  
  55. mt_music
  56.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  57.     lea    $dff000,a4
  58.     move.l    module(pc),a0
  59.     lea    stuff(pc),a1
  60.     tst    d5
  61.     beq.s    normal
  62.     addq    #1,8(a1)
  63.     cmp    #$40,8(a1)
  64.     ble.s    normal
  65.     move    #$40,8(a1)
  66.     moveq    #-1,d5
  67. normal    addq.b    #1,(a1)
  68.     move.b    (a1),D0
  69.     cmp.b    mt_speed(pc),D0
  70.     blt.s    mt_nonew
  71.     clr.b    (a1)
  72.     bra    mt_getnew
  73. mt_nonew
  74.     lea    mt_voice1(pc),a6
  75.     lea    $a0(a4),a5
  76.     bsr    mt_checkcom
  77.     lea    mt_voice2(pc),a6
  78.     lea    $b0(a4),a5
  79.     bsr    mt_checkcom
  80.     lea    mt_voice3(pc),a6
  81.     lea    $c0(a4),a5
  82.     bsr    mt_checkcom
  83.     lea    mt_voice4(pc),a6
  84.     lea    $d0(a4),a5
  85.     bsr    mt_checkcom
  86.     bra    mt_endr
  87.  
  88. mt_arpeggio
  89.     moveq    #0,d0
  90.     move.b    mt_counter(pc),d0
  91.     divs    #3,d0
  92.     swap    d0
  93.     cmp    #0,d0
  94.     beq.s    mt_arp2
  95.     cmp    #2,d0
  96.     beq.s    mt_arp1
  97.     moveq    #0,d0
  98.     move.b    3(a6),d0
  99.     lsr.b    #4,d0
  100.     bra.s    mt_arp3
  101. mt_arp1    moveq    #0,d0
  102.     move.b    3(a6),d0
  103.     and.b    #$f,d0
  104.     bra.s    mt_arp3
  105. mt_arp2    move.w    $10(a6),d2
  106.     bra.s    mt_arp4
  107. mt_arp3    asl.w    #1,d0
  108.     moveq    #0,d1
  109.     move.w    $10(a6),d1
  110.     lea    mt_periods(pc),a0
  111.     moveq    #$24,d7
  112. mt_arpl    move.w    (a0,d0.w),d2
  113.     cmp.w    (a0),d1
  114.     bge.s    mt_arp4
  115.     lea    2(a0),a0
  116.     dbf    d7,mt_arpl
  117.     rts
  118.  
  119. mt_arp4    move.w    d2,6(a5)
  120.     rts
  121.  
  122. mt_getnew
  123.     move.l    module(pc),a0
  124.     lea    stuff(pc),a5
  125.     move.l    a0,a3
  126.     move.l    a0,a2
  127.     lea    $c(a3),a3
  128.     lea    $3b8(a2),a2
  129.     lea    $43c(a0),a0
  130.     moveq    #0,d0
  131.     move.l    d0,d1
  132.     move.b    3(a5),d0
  133.     move.b    (a2,d0.w),d1
  134.     asl.l    #8,d1
  135.     asl.l    #2,d1
  136.     add    4(a5),d1
  137.     clr    6(a5)
  138.  
  139.     lea    $a0(a4),a5
  140.     lea    mt_voice1(pc),a6
  141.     bsr.s    mt_playvoice
  142.     lea    $b0(a4),a5
  143.     lea    mt_voice2(pc),a6
  144.     bsr.s    mt_playvoice
  145.     lea    $c0(a4),a5
  146.     lea    mt_voice3(pc),a6
  147.     bsr.s    mt_playvoice
  148.     lea    $d0(a4),a5
  149.     lea    mt_voice4(pc),a6
  150.     bsr.s    mt_playvoice
  151.     bra    mt_setdma
  152.  
  153. mt_playvoice
  154.     move.l    (a0,d1.l),(a6)
  155.     addq.l    #4,d1
  156.     moveq    #0,d2
  157.     move.b    2(a6),d2
  158.     and.b    #$f0,d2
  159.     lsr.b    #4,d2
  160.     move.b    (a6),d0
  161.     and.b    #$f0,d0
  162.     or.b    d0,d2
  163.     tst.b    d2
  164.     beq.s    mt_setregs
  165.     moveq    #0,d3
  166.     lea    mt_samplestarts(pc),a1
  167.     move.l    d2,d4
  168.     subq.l    #1,d2
  169.     asl.l    #2,d2
  170.     mulu    #$1e,d4
  171.     move.l    (a1,d2.l),$4(a6)
  172.     move.w    (a3,d4.l),$8(a6)
  173.     move.w    $2(a3,d4.l),$12(a6)
  174.     move.w    $4(a3,d4.l),d3
  175.     tst.w    d3
  176.     beq.s    mt_noloop
  177.     move.l    4(a6),d2
  178.     asl.w    #1,d3
  179.     add.l    d3,d2
  180.     move.l    d2,$a(a6)
  181.     move.w    $4(a3,d4.l),d0
  182.     add.w    $6(a3,d4.l),d0
  183.     move.w    d0,8(a6)
  184.     move.w    $6(a3,d4.l),$e(a6)
  185.     bsr.s    mt_setmaxvol
  186.     bra.s    mt_setregs
  187. mt_noloop
  188.     move.l    $4(a6),d2
  189.     add.l    d3,d2
  190.     move.l    d2,$a(a6)
  191.     move.w    $6(a3,d4.l),$e(a6)
  192.     bsr.s    mt_setmaxvol
  193.  
  194. mt_setregs
  195.     move.w    (a6),d0
  196.     and.w    #$fff,d0
  197.     beq    mt_checkcom2
  198.     move.b    2(a6),d0
  199.     and.b    #15,d0
  200.     cmp.b    #3,d0
  201.     bne.s    mt_setperiod
  202.     bsr    mt_setmyport
  203.     bra    mt_checkcom2
  204.  
  205. mt_setmaxvol
  206.     move    d0,-(sp)
  207.     move    $12(a6),d0
  208.     sub    maxvolume(pc),d0
  209.     bpl.s    @ok
  210.     move    #0,d0
  211. @ok    move    d0,8(a5)
  212.        move    (sp)+,d0
  213.     rts
  214.  
  215. mt_setperiod
  216.     lea    stuff(pc),a1
  217.     move    (a6),$10(a6)
  218.     and    #$fff,$10(a6)
  219.     move    $14(a6),d0
  220.     move    d0,$96(a4)
  221.     clr.b    $1b(a6)
  222.     move.l    4(a6),(a5)
  223.     move    8(a6),4(a5)
  224.     move    $10(a6),d0
  225.     and    #$fff,d0
  226.     move    d0,6(a5)
  227.     move    $14(a6),d0
  228.     or    d0,6(a1)
  229.     bra    mt_checkcom2
  230.  
  231. mt_setdma
  232.     lea    stuff(pc),a1
  233.     move    #$12c,d0
  234. mt_wait    dbf    d0,mt_wait
  235.     move    6(a1),d0
  236.     or    #$8000,d0
  237.     move    d0,$96(a4)
  238.     move    #$12c,d0
  239. mt_wai2    dbf    d0,mt_wai2
  240.     lea    mt_voice4(pc),a6
  241.     move.l    $a(a6),$d0(a4)
  242.     move.w    $e(a6),$d4(a4)
  243.     lea    mt_voice3(pc),a6
  244.     move.l    $a(a6),$c0(a4)
  245.     move.w    $e(a6),$c4(a4)
  246.     lea    mt_voice2(pc),a6
  247.     move.l    $a(a6),$b0(a4)
  248.     move.w    $e(a6),$b4(a4)
  249.     lea    mt_voice1(pc),a6
  250.     move.l    $a(a6),$a0(a4)
  251.     move.w    $e(a6),$a4(a4)
  252.     add    #$10,4(a1)
  253.     cmp    #$400,4(a1)
  254.     bne.s    mt_endr
  255.  
  256. mt_nex    lea    stuff(pc),a1
  257.     clr    4(a1)
  258.     clr.b    1(a1)
  259.     addq.b    #1,3(a1)
  260.     and.b    #$7f,3(a1)
  261.     move.b    3(a1),d1
  262.     move.l    module(pc),a5
  263.     lea    $3b6(a5),a5
  264.     cmp.b    (a5),d1
  265.     bne.s    mt_endr
  266.     clr.b    3(a1)
  267. mt_endr    tst.b    1(a1)
  268.     bne.s    mt_nex
  269. @d    movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  270.     rts
  271.  
  272. mt_setmyport
  273.     move    (a6),d2
  274.     and    #$fff,d2
  275.     move    d2,$18(a6)
  276.     move    $10(a6),d0
  277.     clr.b    $16(a6)
  278.     cmp    d0,d2
  279.     beq.s    mt_clrport
  280.     bge.s    mt_rt
  281.     move.b    #1,$16(a6)
  282.     rts
  283.  
  284. mt_clrport
  285.     clr    $18(a6)
  286. mt_rt    rts
  287.  
  288. mt_myport
  289.     move.b    3(a6),d0
  290.     beq.s    mt_myslide
  291.     move.b    d0,$17(a6)
  292.     clr.b    3(a6)
  293. mt_myslide
  294.     tst.w    $18(a6)
  295.     beq.s    mt_rt
  296.     moveq    #0,d0
  297.     move.b    $17(a6),d0
  298.     tst.b    $16(a6)
  299.     bne.s    mt_mysub
  300.     add.w    d0,$10(a6)
  301.     move.w    $18(a6),d0
  302.     cmp.w    $10(a6),d0
  303.     bgt.s    mt_myok
  304.     move.w    $18(a6),$10(a6)
  305.     clr.w    $18(a6)
  306. mt_myok    move.w    $10(a6),$6(a5)
  307.     rts
  308.  
  309. mt_mysub
  310.     sub.w    d0,$10(a6)
  311.     move.w    $18(a6),d0
  312.     cmp.w    $10(a6),d0
  313.     blt.s    mt_myok
  314.     move.w    $18(a6),$10(a6)
  315.     clr.w    $18(a6)
  316.     move.w    $10(a6),$6(a5)
  317.     rts
  318.  
  319. mt_vib    move.b    3(a6),d0
  320.     beq.s    mt_vi
  321.     move.b    d0,$1a(a6)
  322.  
  323. mt_vi    move.b    $1b(a6),d0
  324.     lsr    #2,d0
  325.     and    #$1f,d0
  326.     moveq    #0,d2
  327.     move.b    mt_sin(pc,d0.w),d2
  328.     move.b    $1a(a6),d0
  329.     and    #15,d0
  330.     mulu    d0,d2
  331.     lsr    #6,d2
  332.     move    $10(a6),d0
  333.     tst.b    $1b(a6)
  334.     bmi.s    mt_vibmin
  335.     add    d2,d0
  336.     bra.s    mt_vib2
  337.  
  338. mt_sin    dc.b    $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  339.     dc.b    $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  340.  
  341. mt_vibmin
  342.     sub    d2,d0
  343. mt_vib2    move    d0,$6(a5)
  344.     move.b    $1a(a6),d0
  345.     lsr    #2,d0
  346.     and    #$3c,d0
  347.     add.b    d0,$1b(a6)
  348.     rts
  349.  
  350. mt_nop    move.w    $10(a6),$6(a5)
  351.     rts
  352.  
  353. mt_checkcom
  354.     move    2(a6),d0
  355.     and    #$fff,d0
  356.     beq.s    mt_nop
  357.     move.b    2(a6),d0
  358.     and.b    #15,d0
  359.     tst.b    d0
  360.     beq    mt_arpeggio
  361.     cmp.b    #$1,d0
  362.     beq.s    mt_portup
  363.     cmp.b    #$2,d0
  364.     beq    mt_portdown
  365.     cmp.b    #$3,d0
  366.     beq    mt_myport
  367.     cmp.b    #$4,d0
  368.     beq    mt_vib
  369.     move    $10(a6),$6(a5)
  370.     cmp.b    #$a,d0
  371.     beq.s    mt_volslide
  372.     rts
  373.  
  374. mt_volslide
  375.     moveq    #0,d0
  376.     move.b    3(a6),d0
  377.     lsr.b    #4,d0
  378.     tst.b    d0
  379.     beq.s    mt_voldown
  380.     add    d0,$12(a6)
  381.     cmp    #$40,$12(a6)
  382.     bmi.s    mt_vol2
  383.     move    #$40,$12(a6)
  384. mt_vol2    bra    mt_setmaxvol
  385.  
  386. mt_voldown
  387.     moveq    #0,d0
  388.     move.b    3(a6),d0
  389.     and.b    #$f,d0
  390.     sub    d0,$12(a6)
  391.     bpl.s    mt_vol3
  392.     clr    $12(a6)
  393. mt_vol3    bra    mt_setmaxvol
  394.  
  395. mt_portup
  396.     moveq    #0,d0
  397.     move.b    3(a6),d0
  398.     sub    d0,$10(a6)
  399.     move    $10(a6),d0
  400.     and    #$fff,d0
  401.     cmp    #$71,d0
  402.     bpl.s    mt_por2
  403.     and    #$f000,$10(a6)
  404.     or    #$71,$10(a6)
  405. mt_por2    move    $10(a6),d0
  406.     and    #$fff,d0
  407.     move    d0,$6(a5)
  408.     rts
  409.  
  410. mt_portdown
  411.     clr    d0
  412.     move.b    3(a6),d0
  413.     add    d0,$10(a6)
  414.     move    $10(a6),d0
  415.     and    #$fff,d0
  416.     cmp    #$358,d0
  417.     bmi.s    mt_por3
  418.     and    #$f000,$10(a6)
  419.     or    #$358,$10(a6)
  420. mt_por3    move    $10(a6),d0
  421.     and    #$fff,d0
  422.     move    d0,$6(a5)
  423.     rts
  424.  
  425. mt_checkcom2    
  426.     lea    stuff(pc),a1
  427.     move.b    2(a6),d0
  428.     and.b    #15,d0
  429.     cmp.b    #$d,d0
  430.     beq.s    mt_pattbreak
  431.     cmp.b    #$b,d0
  432.     beq.s    mt_posjmp
  433.     cmp.b    #$c,d0
  434.     beq.s    mt_setvol
  435.     cmp.b    #$f,d0
  436.     beq.s    mt_setspeed
  437.     rts
  438.  
  439.  
  440. mt_pattbreak
  441.     not.b    1(a1)
  442.     rts
  443.  
  444. mt_posjmp
  445.     move.b    3(a6),d0
  446.     subq.b    #1,d0
  447.     move.b    d0,3(a1)
  448.     not.b    1(a1)
  449.     rts
  450.  
  451. mt_setvol
  452.     move    d0,-(sp)
  453.     cmp.b    #$40,3(a6)
  454.     ble.s    mt_vol4
  455.     move.b    #$40,$3(a6)
  456. mt_vol4    move.b    3(a6),d0
  457.     sub.b    maxvolume+1(pc),d0
  458.     bpl.s    .ok
  459.     moveq    #0,d0
  460. .ok    move.b    d0,$8+1(a5)
  461.     move    (sp)+,d0
  462.     rts
  463.  
  464. mt_setspeed
  465.     move.b    3(a6),d0
  466.     and    #$1f,d0
  467.     beq.s    mt_rts2
  468.     clr.b    (a1)
  469.     move.b    d0,2(a1)
  470. mt_rts2    rts
  471.  
  472. module        dc.l    0        ;songs: pattern,pattpos(0-63),speed
  473.  
  474. songs        dc.b    0,0,8
  475.         dc.b    7,0,6
  476.         dc.b    7,16,6
  477.         dc.b    7,32,6
  478.         dc.b    8,0,6
  479.         dc.b    8,32,6
  480.         dc.b    9,0,6
  481.         dc.b    7,48,6
  482.         dc.b    8,56,6
  483.         EVEN
  484. stuff
  485. mt_counter    dc.b    0
  486. mt_break    dc.b    0
  487. mt_speed    dc.b    0
  488. mt_songpos    dc.b    0
  489. mt_pattpos    dc.w    0
  490. mt_dmacon    dc.w    0
  491. maxvolume    dc.w    0     0=maximum
  492.  
  493. mt_samplestarts    ds.l    $1f
  494. mt_voice1    ds.w    10
  495.         dc.w    1
  496.         ds.w    3
  497. mt_voice2    ds.w    10
  498.         dc.w    2
  499.         ds.w    3
  500. mt_voice3    ds.w    10
  501.         dc.w    4
  502.         ds.w    3
  503. mt_voice4    ds.w    10
  504.         dc.w    8
  505.         ds.w    3
  506. mt_periods
  507.     dc.w    $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  508.     dc.w    $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  509.     dc.w    $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  510.     dc.w    $007f,$0078,$0071,$0000,$0000
  511.  
  512.  
  513.